<?php

require_once 'OperacoesBD.php';
require_once 'ConectaDB.php';
require_once 'DBAluno.php';
require_once 'DBProfessor.php';
require_once 'DBDefesa.php';

/**
 * Classe responsável por tratar toda as alterações referentes a tabela Banca no banco de dados,
 * ela implementa a interface OperacoesBD, afim de garantir que os métodos básicos de inserção, 
 * consulta, edição e exclusão de dados sejam implementados na aplicação.
 * 
 * @author gabrielbmoro
 */
class DBBanca implements OperacoesBD {

    private $conection;
    private $bdConection;
    private $table;
    private $dbAluno;
    private $dbProfessor;
    private $dbDefesa;

    /* O método construtor inicializará os dados: recuperando a conecção com o banco de dados, 
      inicializando o nome da tabela e recuperando o objeto mediador com a base de dados */

    public function __construct() {
        $this->conection = ConectaDB::singleton();
        $this->bdConection = $this->conection->getBCConection();
        $this->table = "`Banca`";

        $this->dbAluno = new DBAluno();
        $this->dbProfessor = new DBProfessor();
    }

    /* Método responsável por recuperar o id da banca, se baseando no id dos professores que a compõe. */

    public function recuperar($campoCondicional) {
        $campo = "`Professor_idBanca1`,`Professor_idBanca2`,`Professor_idBanca3`";
        $colunas = null;
        $arrayIds = null;
        $count = 0;
        if (isset($this->conection)) {
            $colunas = array(0 => "`Professor_idBanca1`",
                1 => "`Professor_idBanca2`",
                2 => "`Professor_idBanca3`");
            $resultSet = $this->bdConection->query("SELECT " . $campo . " FROM " . $this->table .
                    " WHERE `idBanca`=" . $campoCondicional . ";");

            $id = null;

            while ($row = $resultSet->fetch_object()) {
                $arrayIds[$count] = $row->Professor_idBanca1;
                $arrayIds[$count + 1] = $row->Professor_idBanca2;
                $arrayIds[$count + 2] = $row->Professor_idBanca3;
            }

            return $arrayIds;
        } else
            return null;
    }

    /* Método responsável por cadastrar os ids dos professores que compõe a banca */

    public function inserir($dado) {

        $colunas = "`Professor_idBanca3`,`Professor_idBanca1`,`Professor_idBanca2`";
        $resultSet = $this->bdConection->query("INSERT INTO " . $this->table . "(" . $colunas . ") VALUES(" . $dado . ");");

        if ($resultSet) {
            return true;
        } else {
            return false;
        }
    }

    /* Método responsável por recuperar o id da banca de acordo com os ids dos professores que ela é composta */

    public function recuperarIdBanca($parametro) {
        $campo = "`idBanca`";
        $colunas = null;
        $id = null;
        if (isset($this->conection)) {
            if (sizeof($parametro) == 3) {
                $colunas = array(0 => "`Professor_idBanca1`",
                    1 => "`Professor_idBanca2`",
                    2 => "`Professor_idBanca3`");
                $resultSet = $this->bdConection->query("SELECT " . $campo . " FROM " . $this->table .
                        " WHERE " . $colunas[0] . "= " . $parametro[1] . " and " .
                        $colunas[1] . "= " . $parametro[2] . " and " .
                        $colunas[2] . "= " . $parametro[0] . ";");

                $id = null;

                while ($row = $resultSet->fetch_object()) {
                    $id = $row->idBanca;
                }

                return $id;
            }
        } else {
            $colunas = array(0 => "`Professor_idBanca1`",
                1 => "`Professor_idBanca2`");
            $resultSet = $this->bdConection->query("SELECT " . $campo . " FROM " . $this->table .
                    " WHERE " . $colunas[0] . "= " . $parametro[0] . " and " .
                    $colunas[1] . "= " . $parametro[1] . ";");


            $id = null;

            while ($row = $resultSet->fetch_object()) {
                $id = $row->idBanca;
            }
            return $id;
        }
        return null;
    }

    /* Método responsável por alterar dados da tabela */

    public function editar($campo, $dado) {
        $this->dbDefesa = new DBDefesa();

        $idAluno = $this->dbAluno->recuperaIdAluno($campo);
        $idsProfessores = $this->dbProfessor->recuperaIdProfessor($dado);

        $idBanca = $this->dbDefesa->recuperaIdBanca($idAluno);


        $resultSet = $this->bdConection->query("UPDATE " . $this->table . " SET `Professor_idBanca3`=" . $idsProfessores[2] . " , `Professor_idBanca1`=" . $idsProfessores[0] . " , `Professor_idBanca2`= " . $idsProfessores[1] . " WHERE `idBanca`= " . $idBanca . ";");
        return $resultSet;
    }

    public function deletar($dado) {
        
    }

}
